package com.platform.modules.mall.activity.rule;

import com.platform.common.utils.Constant;
import com.platform.modules.mall.entity.MallGoodsEntity;
import com.platform.modules.mall.entity.MallGoodsToActivityEntity;
import com.platform.modules.mall.service.MallGoodsService;
import org.apache.commons.collections4.CollectionUtils;

import java.math.BigDecimal;
import java.util.List;

/**
 * 抽取商品
 * 根据活动商品关系表中的中奖概率进行抽奖，设置的概率越高，中奖的概率越高
 * 概率数字和不限制在100,根据所有的概率和生成随机数
 */
public class FeiBiZhongGoodsUtil extends RuleAbstract {

    private MallGoodsService goodsService;

    /**
     * 使用这个类的时候，list的创建方式不能使用Arrays.asList(g1,g2,g3,g4);
     * 该方式实现时有一些方法没有实现，在remove时会出现异常
     *
     * @param list 所有参与抽奖的对象
     */
    public FeiBiZhongGoodsUtil(List<MallGoodsToActivityEntity> list, MallGoodsService goodsService) {
        super(list);
        this.goodsService=goodsService;
    }

    /**
     * 去除没有库存的商品
     *
     * @param entity 需要删除的对象
     */
    @Override
    public void delEntity(MallGoodsToActivityEntity entity) {
        super.delEntity(entity);
    }

    /**
     * 随机抽取商品
     *
     * @return
     */
    @Override
    public MallGoodsToActivityEntity getEntity() {
        MallGoodsToActivityEntity gta = null;
        /*没有商品可以抽了，直接返回null*/
        if (CollectionUtils.isEmpty(entityList)) {
            return null;
        }
        /*生成随机数*/
        double num = Math.random() * 100;
        for (MallGoodsToActivityEntity entity : entityList) {
            /*中奖概率为0不参与抽奖*/
            if (new BigDecimal(Constant.STR_ZERO).compareTo(entity.getProbability()) == 0) {
                continue;
            }
            if (entity.getProbability().compareTo(BigDecimal.valueOf(num)) > 0) {
                gta = entity;
                break;
            }
        }
        //未抽中则取概率最高奖品（保证必中奖）
        if (null == gta) {
          //获取谢谢惠顾商品
            MallGoodsEntity goods=goodsService.lambdaQuery().eq(MallGoodsEntity::getGoodsSn,"xxhg").one();
            //设值
            gta=new MallGoodsToActivityEntity();
            gta.setId("-1");
            gta.setGoodsId(goods.getId());
            gta.setExpendCount(goods.getGoodsNumber());
        }
        return gta;
    }


}
